




#ifndef __USER_NV_H__
#define __USER_NV_H__

#include <stdint.h>


  
#define   USER_CONFIG_FILE_NAME       "user_config.bin"          //user_config_u

#define   FLASH_USER_CONFIG_PAGE        ( 0U )     //用户数据映射空间首地址--
#define   FLASH_USER_CONFIG_FIRST_WR    (0xA1U)




// #define SYS_MODE_PATROL 0
// #define SYS_MODE_MANUAL 1
// #define SYS_MODE_MAINTENANCE 2
// #define SYS_MODE_MAX 3

/*@ref maintenance_mode*/

typedef enum{
    SYS_MODE_PATROL = 0,            //任何情况下都输出
    SYS_MODE_MANUAL,                //小于设定的log_lv才输出
    SYS_MODE_MAINTENANCE,
    SYS_MODE_MAX,                

}  sys_mode_e;



#pragma pack(1)


#define   USER_CONFIG_PARA_BUF_MAX        (256u)    //flash的长度要是偶数
#define   IP_STRING_LEN            (18u) 




typedef	 struct 
{
				 						
    uint8_t  First;       //首次上电  	
    
    uint8_t maintenance_mode; //@ref maintenance_mode
    char ip[IP_STRING_LEN];
    int8_t time_zone;

    uint16_t port;
    int32_t longitude;
    int32_t latitude;


//---------固件参数------------

    
//----5.6 集中器参数 75H-------------------		
    // int16_t    Longitude;             //经度---- (-180.00 - +180.00) 单位 0.01---感觉精度不够高--
    // int16_t    Latitude;              //纬度---- (-90.00 - +90.00)   单位 0.01
    // int8_t     cTimeZone;              //时区-----( -11 - +12 ) 							

} user_config_t;




/*------------------	------------------	------------------	------------------	

typedef	 union 
{
		uint8_t  Buffer[USER_CONFIG_PARA_BUF_MAX ];   //178  --
		struct         
		{					 						
			uint8_t  First;       //首次上电  	
			
            uint8_t maintenance_mode; //@ref maintenance_mode
            char ip[IP_STRING_LEN];
            int8_t time_zone;

            uint16_t port;
            int32_t longitude;
            int32_t latitude;


//---------固件参数------------

			
	//----5.6 集中器参数 75H-------------------		
			// int16_t    Longitude;             //经度---- (-180.00 - +180.00) 单位 0.01---感觉精度不够高--
			// int16_t    Latitude;              //纬度---- (-90.00 - +90.00)   单位 0.01
			// int8_t     cTimeZone;              //时区-----( -11 - +12 ) 
									

		} Para;
		
} user_config_u;

--	------------------	------------------	------------------	*/




#pragma pack()



extern user_config_t user_config;

 void user_config_init(void);



void coord_timezone_save(int32_t longitude,int32_t latitude, int8_t time_zone);

/**
 * @brief 
 * 
 */
void coord_timezone_save_enable(void);


/**
 * @brief 
 * 
 * @param 
* @ret 1=ok ,0=fail
 */    

uint8_t coord_timezone_check(int32_t longitude,int32_t latitude, int8_t time_zone);


/**
 * @brief 根据全局变量timezone设置时区
 * 
 */
void timezone_set(void);


/**
 * @brief 保存服务器地址
 * 
 * @param ip 
 * @param port 
 */
void server_addr_save(char* ip, uint16_t port);


void user_config_save_enable(void);

void User_Config_SaveProcess(void);




#endif




